/**
 * 
 */
package fr.thelem.gestiondemandesthelem.dao.model;

import static javax.persistence.CascadeType.PERSIST;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Entité Demande
 */
@Entity
@Table(name = "CP_DEMANDE")
public class CPDemandeEntity implements Serializable {

    /**
     * Constructeur
     */
    public CPDemandeEntity() {
      //  CDpointDeControlesCPDemandesEffectues = new HashSet<CPPointDeControleEntity>();
        parametreDemandeCPDemandes = new HashSet<CPParametreDemandeEntity>();
        parametreEtapeCPDemandes = new HashSet<CPParametreEtapeEntity>();
        etapesCPDemande = new HashSet<CPEtapeEntity>();
    }

    /** Attribut serialVersionUID */
    private static final long serialVersionUID = 1L;
    @Column(name = "IDENTIFIANT_CP_DEMANDE", nullable = false)
    @Id
    @GeneratedValue
    private int identifiantCPDemande;

    @Column(name = "TITRE_CP_DEMANDE")
    private String titreCPDemande;

    @Column(name = "DATE_CP_DEMANDE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dateCPDemande;

    @Column(name = "CODE_PROJET_CP_DEMANDE")
    private String codeProjetCPDemande;

    @Column(name = "CHARGE_CP_DEMANDE")
    private String chargeCPDemande;

    @Column(name = "COMMENTAIRE_CP_DEMANDE")
    private String commentaireCPDemande;

    @Column(name = "REFERENCE_CP_DEMANDE")
    private String referenceCPDemande;

    @ManyToMany
    @JoinTable(name = "ADMINISTRATION", joinColumns = {@JoinColumn(name = "IDENTIFIANT_CP_DEMANDE")}, inverseJoinColumns = {@JoinColumn(name = "LDAP_PERSONNE")})
    private Collection<AdministrateurEntity> administrateursCPDemande;

    @ManyToOne
    @JoinColumn(name = "LDAP_PERSONNE")
    private PersonneEntity personneEffectueCPDemande;

    @ManyToOne
    @JoinColumn(name = "NOM_ETAT")
    private EtatEntity etatCPDemande;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "DATE_ETAT")
    private Date dateEtat;

    @ManyToMany(mappedBy = "demandesSuivies")
    private Collection<PersonneEntity> personneSuiviCPDemande;

    @ManyToOne
    @JoinColumn(name = "IDENTIFIANT_CD_DEMANDE")
    private CDDemandeEntity CDDemandeCPDemande;

  /*  @ManyToMany
    @JoinTable(name = "POINT_DE_CONTROLE_EFFECTUE", joinColumns = {@JoinColumn(name = "IDENTIFIANT_CP_DEMANDE")}, inverseJoinColumns = {@JoinColumn(name = "IDENTIFIANT_POINT_DE_CONTROLE")})
    private Collection<CPPointDeControleEntity> CDpointDeControlesCPDemandesEffectues;*/

    @OneToMany(mappedBy = "CPdemandeCPParametreDemande", fetch=FetchType.EAGER)
    private Collection<CPParametreDemandeEntity> parametreDemandeCPDemandes;

    @OneToMany(mappedBy = "CPdemandeCPParametreEtape")
    private Collection<CPParametreEtapeEntity> parametreEtapeCPDemandes;

    @OneToMany(mappedBy = "CPDemandeCPEtape")
    private Collection<CPEtapeEntity> etapesCPDemande;
    
    @OneToMany(mappedBy = "CPDemandeCommentaire")
    private Collection<CommentairesEntity> CommentaireCPDemandes;
    
    @OneToMany(mappedBy = "CPdemandeCPPointControle")
    private Collection<CPPointDeControleEntity> CPPointControleCPDemandes;
    
    /* @OneToMany(cascade = {PERSIST}, mappedBy = "CPDemandeCorrespondanceCPDemandeCPPointControle")
    private Collection<CorrespondanceCPDemandeCPPointControleEntity> correspondanceCPDemandeCPPointControleCPDemande;
    
    @ManyToMany
    @JoinTable(name = "CP_POINT_DE_CONTROLE", joinColumns = {@JoinColumn(name = "IDENTIFIANT_CP_DEMANDE")}, inverseJoinColumns = {@JoinColumn(name = "IDENTIFIANT_CP_POINT_DE_CONTROLE")})
    private Collection<CPPointDeControleEntity> CPPointDeControleCPDemande;*/

    /**
     * Accesseur de titreCPDemande
     * 
     * @return le titreCPDemande
     */
    public String getTitreCPDemande() {
        return titreCPDemande;
    }

    /**
     * Affectation de titreCPDemande
     * 
     * @param titreCPDemande titreCPDemande à affecter
     */
    public void setTitreCPDemande(String titreCPDemande) {
        this.titreCPDemande = titreCPDemande;
    }

    /**
     * Accesseur de dateCPDemande
     * 
     * @return le dateCPDemande
     */
    public Date getDateCPDemande() {
        return dateCPDemande;
    }

    /**
     * Affectation de dateCPDemande
     * 
     * @param dateCPDemande dateCPDemande à affecter
     */
    public void setDateCPDemande(Date dateCPDemande) {
        this.dateCPDemande = dateCPDemande;
    }

    /**
     * Accesseur de codeProjetCPDemande
     * 
     * @return le codeProjetCPDemande
     */
    public String getCodeProjetCPDemande() {
        return codeProjetCPDemande;
    }

    /**
     * Affectation de codeProjetCPDemande
     * 
     * @param codeProjetCPDemande codeProjetCPDemande à affecter
     */
    public void setCodeProjetCPDemande(String codeProjetCPDemande) {
        this.codeProjetCPDemande = codeProjetCPDemande;
    }

    /**
     * Accesseur de chargeCPDemande
     * 
     * @return le chargeCPDemande
     */
    public String getChargeCPDemande() {
        return chargeCPDemande;
    }

    /**
     * Affectation de chargeCPDemande
     * 
     * @param chargeCPDemande chargeCPDemande à affecter
     */
    public void setChargeCPDemande(String chargeCPDemande) {
        this.chargeCPDemande = chargeCPDemande;
    }

    /**
     * Accesseur de commentaireCPDemande
     * 
     * @return le commentaireCPDemande
     */
    public String getCommentaireCPDemande() {
        return commentaireCPDemande;
    }

    /**
     * Affectation de commentaireCPDemande
     * 
     * @param commentaireCPDemande commentaireCPDemande à affecter
     */
    public void setCommentaireCPDemande(String commentaireCPDemande) {
        this.commentaireCPDemande = commentaireCPDemande;
    }

    /**
     * Accesseur de administrateursCPDemande
     * 
     * @return le administrateursCPDemande
     */
    public Collection<AdministrateurEntity> getAdministrateursCPDemande() {
        return administrateursCPDemande;
    }

    /**
     * Affectation de administrateursCPDemande
     * 
     * @param administrateursCPDemande administrateursCPDemande à affecter
     */
    public void setAdministrateursCPDemande(Collection<AdministrateurEntity> administrateursCPDemande) {
        this.administrateursCPDemande = administrateursCPDemande;
    }

    /**
     * Accesseur de personneEffectueCPDemande
     * 
     * @return le personneEffectueCPDemande
     */
    public PersonneEntity getPersonneEffectueCPDemande() {
        return personneEffectueCPDemande;
    }

    /**
     * Affectation de personneEffectueCPDemande
     * 
     * @param personneEffectueCPDemande personneEffectueCPDemande à affecter
     */
    public void setPersonneEffectueCPDemande(PersonneEntity personneEffectueCPDemande) {
        this.personneEffectueCPDemande = personneEffectueCPDemande;
    }

    /**
     * Accesseur de etatCPDemande
     * 
     * @return le etatCPDemande
     */
    public EtatEntity getEtatCPDemande() {
        return etatCPDemande;
    }

    /**
     * Affectation de etatCPDemande
     * 
     * @param etatCPDemande etatCPDemande à affecter
     */
    public void setEtatCPDemande(EtatEntity etatCPDemande) {
        this.etatCPDemande = etatCPDemande;
    }

    /**
     * Accesseur de personneSuiviCPDemande
     * 
     * @return le personneSuiviCPDemande
     */
    public Collection<PersonneEntity> getPersonneSuiviCPDemande() {
        return personneSuiviCPDemande;
    }

    /**
     * Affectation de personneSuiviCPDemande
     * 
     * @param personneSuiviCPDemande personneSuiviCPDemande à affecter
     */
    public void setPersonneSuiviCPDemande(Collection<PersonneEntity> personneSuiviCPDemande) {
        this.personneSuiviCPDemande = personneSuiviCPDemande;
    }

    /**
     * Accesseur de cDpointDeControlesCPDemandesEffectues
     * 
     * @return le cDpointDeControlesCPDemandesEffectues
     */
 /*   public Collection<CPPointDeControleEntity> getCDpointDeControlesCPDemandesEffectues() {
        return CDpointDeControlesCPDemandesEffectues;
    }*/

    /**
     * Affectation de cDpointDeControlesCPDemandesEffectues
     * 
     * @param cDpointDeControlesCPDemandesEffectues cDpointDeControlesCPDemandesEffectues à affecter
     */
  /*  public void setCDpointDeControlesCPDemandesEffectues(Collection<CPPointDeControleEntity> cDpointDeControlesCPDemandesEffectues) {
        CDpointDeControlesCPDemandesEffectues = cDpointDeControlesCPDemandesEffectues;
    }*/

    /**
     * Accesseur de parametreDemandeCPDemandes
     * 
     * @return le parametreDemandeCPDemandes
     */
    public Collection<CPParametreDemandeEntity> getParametreDemandeCPDemandes() {
        return parametreDemandeCPDemandes;
    }

    /**
     * Affectation de parametreDemandeCPDemandes
     * 
     * @param parametreDemandeCPDemandes parametreDemandeCPDemandes à affecter
     */
    public void setParametreDemandeCPDemandes(Collection<CPParametreDemandeEntity> parametreDemandeCPDemandes) {
        this.parametreDemandeCPDemandes = parametreDemandeCPDemandes;
    }

    /**
     * Accesseur de etapesCPDemande
     * 
     * @return le etapesCPDemande
     */
    public Collection<CPEtapeEntity> getEtapesCPDemande() {
        return etapesCPDemande;
    }

    /**
     * Affectation de etapesCPDemande
     * 
     * @param etapesCPDemande etapesCPDemande à affecter
     */
    public void setEtapesCPDemande(Collection<CPEtapeEntity> etapesCPDemande) {
        this.etapesCPDemande = etapesCPDemande;
    }

    /**
     * Accesseur de cDDemandeCPDemande
     * 
     * @return le cDDemandeCPDemande
     */
    public CDDemandeEntity getCDDemandeCPDemande() {
        return CDDemandeCPDemande;
    }

    /**
     * Affectation de cDDemandeCPDemande
     * 
     * @param cDDemandeCPDemande cDDemandeCPDemande à affecter
     */
    public void setCDDemandeCPDemande(CDDemandeEntity cDDemandeCPDemande) {
        CDDemandeCPDemande = cDDemandeCPDemande;
    }

    /**
     * Accesseur de identifiantCPDemande
     * 
     * @return le identifiantCPDemande
     */
    public int getIdentifiantCPDemande() {
        return identifiantCPDemande;
    }

    /**
     * Affectation de identifiantCPDemande
     * 
     * @param identifiantCPDemande identifiantCPDemande à affecter
     */
    public void setIdentifiantCPDemande(int identifiantCPDemande) {
        this.identifiantCPDemande = identifiantCPDemande;
    }

    /**
     * Accesseur de referenceCPDemande
     * 
     * @return le referenceCPDemande
     */
    public String getReferenceCPDemande() {
        return referenceCPDemande;
    }

    /**
     * Affectation de referenceCPDemande
     * 
     * @param referenceCPDemande referenceCPDemande à affecter
     */
    public void setReferenceCPDemande(String referenceCPDemande) {
        this.referenceCPDemande = referenceCPDemande;
    }

    /**
     * Accesseur de parametreEtapeCPDemandes
     * 
     * @return le parametreEtapeCPDemandes
     */
    public Collection<CPParametreEtapeEntity> getParametreEtapeCPDemandes() {
        return parametreEtapeCPDemandes;
    }

    /**
     * Affectation de parametreEtapeCPDemandes
     * 
     * @param parametreEtapeCPDemandes parametreEtapeCPDemandes à affecter
     */
    public void setParametreEtapeCPDemandes(Collection<CPParametreEtapeEntity> parametreEtapeCPDemandes) {
        this.parametreEtapeCPDemandes = parametreEtapeCPDemandes;
    }

    /**
     * Accesseur de dateEtat
     * 
     * @return le dateEtat
     */
    public java.util.Date getDateEtat() {
        return dateEtat;
    }

    /**
     * Affectation de dateEtat
     * 
     * @param dateEtat dateEtat à affecter
     */

    public void setDateEtat(java.util.Date dateEtat) {
        this.dateEtat = dateEtat;
    }

    /**
     * Accesseur de CommentaireCPDemandes
     * 
     * @return le CommentaireCPDemandes
     */
	public Collection<CommentairesEntity> getCommentaireCPDemandes() {
		return CommentaireCPDemandes;
	}

	/**
     * Affectation de CommentaireCPDemandes
     * 
     * @param CommentaireCPDemandes CommentaireCPDemandes à affecter
     */
	public void setCommentaireCPDemandes(
			Collection<CommentairesEntity> commentaireCPDemandes) {
		CommentaireCPDemandes = commentaireCPDemandes;
	}

	public Collection<CPPointDeControleEntity> getCPPointControleCPDemandes() {
		return CPPointControleCPDemandes;
	}

	public void setCPPointControleCPDemandes(
			Collection<CPPointDeControleEntity> cPPointControleCPDemandes) {
		CPPointControleCPDemandes = cPPointControleCPDemandes;
	}

	/*public Collection<CorrespondanceCPDemandeCPPointControleEntity> getCorrespondanceCPDemandeCPPointControleCPDemande() {
		return correspondanceCPDemandeCPPointControleCPDemande;
	}

	public void setCorrespondanceCPDemandeCPPointControleCPDemande(
			Collection<CorrespondanceCPDemandeCPPointControleEntity> correspondanceCPDemandeCPPointControleCPDemande) {
		this.correspondanceCPDemandeCPPointControleCPDemande = correspondanceCPDemandeCPPointControleCPDemande;
	}

	public Collection<CPPointDeControleEntity> getCPPointDeControleCPDemande() {
		return CPPointDeControleCPDemande;
	}

	public void setCPPointDeControleCPDemande(
			Collection<CPPointDeControleEntity> cPPointDeControleCPDemande) {
		CPPointDeControleCPDemande = cPPointDeControleCPDemande;
	}*/
    
    

}
